﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Web.UI.HtmlControls;
namespace KioskosJugandoLimpio.Classes
{
    public class Encuesta
    {
        public string Titulo;
        public int idEncuestas;
        public string Introduccion;
        public string NotaFinal;
        public List<Seccion> Secciones;
        public Modes mode;
        public int agrupador;

        public Encuesta(int idEncuestas)
        {
            // TODO: Complete member initialization
            this.idEncuestas = idEncuestas;
            DataTable t = SQL.fnDataTable(string.Format("EXEC obtenerEncuesta {0}", idEncuestas));
            this.Titulo = t.Rows[0]["Titulo"].ToString();
            this.Introduccion = t.Rows[0]["Introduccion"].ToString();
            this.NotaFinal = t.Rows[0]["NotaFinal"].ToString();
            Secciones = new List<Seccion>();
            foreach (DataRow row in t.Rows)
            {
                int idSeccion;
                if (int.TryParse(row["idSecciones"].ToString(), out idSeccion))
                {
                    Seccion seccion = new Seccion(int.Parse(row["idSecciones"].ToString()), this);
                    Secciones.Add(seccion);
                }
            }
            mode = Modes.View;
        }
        public Encuesta()
        {
            // TODO: Complete member initialization
            mode = Modes.View;
            Secciones = new List<Seccion>();
        }
        public ListItem listItem
        {
            get
            {
                ListItem item = new ListItem();
                item.Text = this.Titulo;
                item.Value = string.Format("Encuesta.aspx?idEncuestas={0}", this.idEncuestas);
                return item;
            }
        }
        Label SpanTitulo
        {
            get
            {
                Label lblTitulo = new Label();
                lblTitulo.Text = Titulo;
                lblTitulo.CssClass = "titulo";
                return lblTitulo;
            }
        }
        Label SpanIntroduccion
        {
            get
            {
                Label lblIntroduccion = new Label();
                lblIntroduccion.Text = Introduccion;
                lblIntroduccion.CssClass = "introduccion";
                return lblIntroduccion;
            }
        }
        public Control form
        {
            get
            {
                if (mode == Modes.Edit)
                {
                    return this.formEdit;
                }

                Control ctl = new Control();
                ctl.Controls.Add(SpanTitulo);
                ctl.Controls.Add(SpanIntroduccion);

                foreach (Seccion seccion in Secciones)
                {
                    ctl.Controls.Add(seccion.div);
                }
                ctl.Controls.Add(SpanNotaFinal);

                Button b = new Button();
                b.UseSubmitBehavior = true;
                b.Text = "Guardar";
                b.OnClientClick = "return fnSerialize();";
                ctl.Controls.Add(b);
                return ctl;
            }
        }
        public Control formEdit
        {
            get
            {

                DIVformat divMain = new DIVformat("__encuesta_" + idEncuestas.ToString());

                DIVformat divHead = new DIVformat("__encuesta_head_" + idEncuestas.ToString());

                divHead.addTextArea(Titulo, "ET", "__introduccion_" + idEncuestas, "subtitulo", "width: 100%; height: 60px;");

                divHead.addLabel("Introduccion", "pregunta");

                divHead.addTextArea(Introduccion, "EI", "__introduccion_" + idEncuestas, "subtitulo", "width: 100%; height: 60px;");

                divHead.addLabel("Nota final", "pregunta");

                divHead.addTextArea(NotaFinal, "EN", "__notaFinal_" + idEncuestas, "introduccion", "width: 100%; height: 60px;");
                //lblNotaFinal.ClientIDMode = ClientIDMode.Static;                                

                foreach (Seccion seccion in Secciones)
                {
                    divHead.addControl(seccion.div);
                }

                divMain.addControl(divHead.getDIV());
                divMain.addNewLine();

                //divMain.addLink("Agregar Seccion...", string.Format("addSeccion('__encuesta_head_{0}');", idEncuestas));
                divMain.addLink("Agregar Seccion...", string.Format("addSeccion('__encuesta_head_{0}');", idEncuestas));

                divMain.addNewLine();
                Button b = new Button();
                b.UseSubmitBehavior = true;
                b.Text = "Guardar";
                b.OnClientClick = "return fnSerialize();";
                divMain.addControl(b);

                return divMain.getDIV();
            }
        }
        public Control SpanNotaFinal
        {
            get
            {
                Label lblNotaFinal = new Label();
                lblNotaFinal.Text = NotaFinal;
                lblNotaFinal.CssClass = "introduccion";
                return lblNotaFinal;
            }
        }
        public DataSet respuestas
        {
            get
            {
                DataSet ds = SQL.fnDataSet(string.Format("EXEC reporteDeEncuesta {0},{1}", agrupador, idEncuestas));
                return ds;
                /*          List<Tabla> lista = new List<Tabla>();
                foreach (DataTable dt in ds.Tables)
                {
                    if (dt.Rows.Count > 0)
                    {
                        Tabla t = new Tabla();
                        t.nombre = dt.Rows[0]["DTName"].ToString();
                        foreach (DataRow dr in dt.Rows)
                        {
                            List<object> r = new  List<object>();
                            foreach (DataColumn dc in dt.Columns) {
                                r.Add(new object(){dc.ColumnName:dr[dc].ToString()});
                            }
                            t.rows.Add(r);
                        }
                        lista.Add(t);   
                    }
                }
                return lista;*/
            }
        }
        public Control InputTitulo
        {
            get
            {
                TextBox lblTitulo = new TextBox();
                lblTitulo.Text = Titulo;
                lblTitulo.CssClass = "titulo";
                lblTitulo.Attributes.Add("style", "width:100%;");
                return lblTitulo;
            }
        }
        public Control InputIntroduccion
        {

            get
            {
                TextBox lblIntroduccion = new TextBox();
                lblIntroduccion.TextMode = TextBoxMode.MultiLine;
                lblIntroduccion.Rows = 8;
                lblIntroduccion.Text = Introduccion;
                lblIntroduccion.CssClass = "introduccion";
                lblIntroduccion.Attributes.Add("style", "width:100%;");
                return lblIntroduccion;
            }
        }
        public Control InputNotaFinal
        {
            get
            {
                TextBox lblNotaFinal = new  TextBox();
                lblNotaFinal.Text = NotaFinal;
                lblNotaFinal.CssClass = "introduccion";
                lblNotaFinal.ID = "__notaFinal";
                lblNotaFinal.Attributes.Add("style", "width:100%;");
                lblNotaFinal.ClientIDMode = ClientIDMode.Static;
                return lblNotaFinal;
            }
        }
        internal void guardar()
        {
            System.Data.SqlClient.SqlTransaction tran = SQL.fnGetTran();
            try
            {
                if (this.idEncuestas == -1)
                {
                    //@idEncuestas INT ,@Introduccion TEXT, @NotaFinal VARCHAR(45), @TiposEncuestas_idTiposEncuestas INT, @Titulo VARCHAR
                    this.idEncuestas = SQL.fnExec(string.Format("EXEC guardarEncuesta '{0}' , '{1}','{2}',{3},'{4}'", this.idEncuestas, this.Introduccion,this.NotaFinal, 1, this.Titulo), tran);

                }
                else
                {
                    SQL.fnExec(string.Format("EXEC guardarEncuesta '{0}' , '{1}','{2}',{3},'{4}'", this.idEncuestas, this.Introduccion, this.NotaFinal, 1, this.Titulo), tran);
                }
                DataTable t = SQL.fnDataTable(string.Format("EXEC seccionesPorEncuesta {0}", this.idEncuestas));
                foreach (DataRow row in t.Rows)
                {
                    bool deleted = true;
                    foreach (Seccion seccion in Secciones)
                    {
                        if (seccion.idSecciones.ToString().Equals(row["idSecciones"].ToString()))
                        {
                            deleted = false;
                        }
                    }
                    if (deleted)
                    {
                        SQL.fnExec(string.Format("EXEC borrarSeccion {0}", row["idSecciones"].ToString()), tran);
                    }
                }
                foreach (Seccion seccion in Secciones) {
                    seccion.guardar(tran);
                }
                SQL.fnCommit(tran);
            }
            catch (Exception exe) {
                SQL.fnRollback(tran);
                throw exe;
            }
        }
    }
}
        
